package com.ruoyi.hr.service.impl;

import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.hr.domain.salary.EmpDate;
import com.ruoyi.hr.domain.salary.EmpSalary;
import com.ruoyi.hr.mapper.EmpSalaryMapper;
import com.ruoyi.hr.service.EmpSalaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class EmpSalaryServiceImpl implements EmpSalaryService {

    @Autowired
    private EmpSalaryMapper empSalaryMapper;

    @Override
    public List<EmpSalary> salaryEmp(List<EmpSalary> empSalaries) {
        //step1 循环员工信息
        for (EmpSalary empSalary : empSalaries) {
            //公式计算
            empSalary.setTotalPay(getEmpSalary(empSalary));
        }
        return empSalaries;
    }


    /**
     * 计算员工实际工资
     *
     * @return
     */
    public static BigDecimal getEmpSalary(EmpSalary empSalary) {
        if (empSalary.getEmpDate().getDays() == null || empSalary.getEmpDate().getTdays() == null || empSalary.getEmpDate().getMonth() == null) {
            return BigDecimal.valueOf(0);
        } else {
            //基本工资
            BigDecimal basePay = empSalary.getBasePay();
            //岗位工资
            BigDecimal postSalary = empSalary.getPostSalary();
            //绩效工资
            BigDecimal meritPay = empSalary.getMeritPay();
            //应工作天数
            Integer days = empSalary.getEmpDate().getDays();
            //请假天数
            Integer tDays = empSalary.getEmpDate().getTdays();
            //基数 三者相加
            BigDecimal base = basePay.add(postSalary).add(meritPay);
            //每天工资
            BigDecimal daySalary = base.divide(BigDecimal.valueOf(days), 2, RoundingMode.DOWN);
            //实发总工资
            BigDecimal totalSalary = daySalary.multiply(BigDecimal.valueOf(days - tDays));
            return totalSalary;
        }
    }


    public static void main(String[] args) {
        //System.out.println(EmpSalaryServiceImpl.getEmpSalary(new BigDecimal(10000),30,4));
    }


    @DataSource(value = DataSourceType.SLAVE)
    @Override
    public List<EmpSalary> findEmpSalary(List<String> AllID) {
        return empSalaryMapper.findEmpSalary(AllID);
    }
}
